package com.neuedu.homework;

import java.io.File;
import java.io.FileFilter;
import java.util.Scanner;

public class HomeWork {
    public static void main(String[] args) {
        test02();
    }

    /**
     * 输入一个目录，遍历该目录下的所有的文件信息（递归）
     */
    private static void test01() {
        // 输入方法
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入文件信息：");
        String s = new String(scanner.nextLine());
        // 输入的字符串s就是文件的路径字符串
        File file = new File(s);
        // 对file调用递归方法
        recurrenceDir(file);
    }


    /**
     * 输入一个目录，遍历该目录下的所有的文件信息（递归）
     * 并且根据录入的关键字信息，进行文件筛选
     */
    private static void test02() {
        // 输入方法
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入文件信息：");
        String s = new String(scanner.nextLine());
        System.out.println("请输入关键字：");
        // string存放关键字
        String strKW = new String(scanner.nextLine());
        // 输入的字符串s就是文件的路径字符串
        File file = new File(s);
        // 对file调用递归方法
        recurrenceDirWithSearch(file, strKW);
    }


    /**
     * 递归的文件遍历
     * @param file
     */
    private  static void recurrenceDir(File file){
        //必须有结束的方式或条件(自然结束退出)
        //必须体现出自调用的过程

        //判断file是否为空
        if (file.exists()){
            //判断file是否为文件
            if (file.isFile()){
                //如果是文件 输出文件路径
                System.out.println("This is a file:"+file.getAbsolutePath());
            }else if (file.isDirectory()){
                //如果是目录 输出目录信息
                System.out.println("This is a dictory:"+file.getAbsolutePath());
                //
                File[] subFiles=file.listFiles();
                //递归遍历当前目录下的每一个子文件
                for (File subFile:subFiles) {
                    //递归调用 进行子文件的遍历
                    recurrenceDir(subFile);
                }
            }
        }

    }

    /**
     * 递归文件遍历并根据关键字查找
     * @param file 递归的目录
     * @param keyWords 关键字
     */
    private  static void recurrenceDirWithSearch(File file,String keyWords){
        //必须有结束的方式或条件(自然结束退出)
        //必须体现出自调用的过程

        //判断file是否为空
        if (file.exists()){
            //判断file是否为文件
            if (file.isFile()){
                //如果是文件 输出文件路径
                System.out.println("This is a file:"+file.getAbsolutePath());
            }else if (file.isDirectory()){
                //如果是目录 输出目录信息
                System.out.println("This is a dictory:"+file.getAbsolutePath());
                //`````
                //```````````
                File[] subFiles=file.listFiles(new FileFilter() {
                    @Override
                    public boolean accept(File pathname) {
                        //判断当前文件是否满足筛选条件 满足则返回true，就会包括在结果数组中
                        if (pathname.getName()!=null&&pathname.getName().contains(keyWords)){
                            return true;
                        }else {
                            //如果不满足筛选条件则返回false，则该文件不包含在结果数组中
                            return false;
                        }


                    }
                });
                //递归遍历当前目录下的每一个子文件
                for (File subFile:subFiles) {
                    //递归调用 进行子文件的遍历
                    recurrenceDir(subFile);
                }
            }
        }

    }
}
